package selectsort;

import common.CreateTestArrUtils;

import java.util.Arrays;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/8/13 2:42
 * 直接选择排序
 * 时间复杂度 O(n^2)
 * 每一次从待排序的数据元素中选择出最小(或者最大)的一个元素, 存放在序列的起始位置, 直到有序
 */
public class SelectSort {

    public static void selectSort(int[] arr) {
        if (arr == null) {
            throw new NullPointerException();
        }
        //选择排序过程
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i; //假定最小索引，最小值为第一个元素
            int min = arr[minIndex];
            for (int j = i + 1; j < arr.length; j++) {
                if (min > arr[j]){
                    //更新最小值
                    min = arr[j];
                    minIndex = j;
                }
            }
            //将最小值放进arr[i]
            if (i != minIndex){
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
        }
    }

    public static void main(String[] args) {
        int[] descArr = CreateTestArrUtils.createDescArr(100);
        System.out.println("原数组 arr=" + Arrays.toString(descArr));
        selectSort(descArr);
        System.out.println("排序后数组 arr=" + Arrays.toString(descArr));
    }
}
